#ifndef CODE_HIGHLIGHTER_H
#define CODE_HIGHLIGHTER_H

#include <QSyntaxHighlighter>
#include <QRegularExpression>

class CodeHighLighter : public QSyntaxHighlighter
{
    Q_OBJECT
public:
    CodeHighLighter(QTextDocument* parent);

private:
    struct HighlightingRule{
        QRegularExpression pattern;  //匹配模式
        QTextCharFormat format;     //格式
    };
    std::vector<HighlightingRule> highlightingRules;
    QTextCharFormat keywordFormat;  //关键字（public，class）
    QTextCharFormat classFormat;//qt中的类
    QTextCharFormat numberFormat;//数字

    QTextCharFormat functionFormat;           // 函数
    QTextCharFormat quotationFormat;          // 字符串
    QTextCharFormat singleLineCommentFormat;  // 单行注释

    QTextCharFormat multiLineCommentFormat;  // 多行注释
    QRegularExpression commentStartExpression;
    QRegularExpression commentEndExpression;


protected:
    //实现虚构函数--行数参数 text是文本框中每一行的内容，每当内容有变化时，该函数会自动调用
    void highlightBlock(const QString &text)override;
};

#endif // CODE_HIGHLIGHTER_H
